g_type_class_add_private (gobject_class, sizeof (ShellAppSystemPrivate));
}
-static void
-load_apps (ShellAppSystem *self)
-{
- ShellAppSystemPrivate *priv = self->priv;
- GList *apps, *l;
-
- apps = g_app_info_get_all ();
- for (l = apps; l != NULL; l = l->next)
- {
- GAppInfo *info = l->data;
- g_hash_table_insert (priv->id_to_app,
- (char *) g_app_info_get_id (info),
- _shell_app_new (G_DESKTOP_APP_INFO (info)));
- }
-
- g_list_free_full (apps, g_object_unref);
-
- g_signal_emit (self, signals[INSTALLED_CHANGED], 0);
-}
-
static void
shell_app_system_init (ShellAppSystem *self)
{
(GDestroyNotify)g_object_unref);
priv->startup_wm_class_to_id = g_hash_table_new (g_str_hash, g_str_equal);
-
- load_apps (self);
}
static void
shell_app_system_lookup_app (ShellAppSystem *self,
const char *id)
{
- return g_hash_table_lookup (self->priv->id_to_app, id);
+ ShellAppSystemPrivate *priv = self->priv;
+ ShellApp *app;
+ GDesktopAppInfo *info;
+
+ app = g_hash_table_lookup (priv->id_to_app, id);
+ if (app)
+ return app;
+
+ info = g_desktop_app_info_new (id);
+ if (!info)
+ return NULL;
+
+ app = _shell_app_new (info);
+ g_hash_table_insert (priv->id_to_app, (char *) id, app);
+ return app;
}
/**